#ifndef __DATE_FORMAT_H__
#define __DATE_FORMAT_H__

#include <iostream>
#include <chrono>
#include <ctime>
#include <sstream>
using namespace std;
using std::chrono::system_clock;

class DateFormat{
public:
    DateFormat(struct std::tm* tmb){
        datetime = tmb;
    }
    ~DateFormat(){};

    // https://www.yiibai.com/cpp_standard_library/cpp_put_time.html
    string Base(const char mode[3]){
        std::ostringstream oss;
        oss << std::put_time(datetime, mode);
        return oss.str();        
    }

    // 获取星期几
    string GetWeekDay(){
        return Base("%A");
    }

    // 获取星期几 - 十进制 星期一的数字为1（1-7）
    int GetWeekDayInt(){
        return std::stoi(Base("%u"));
    }

    // 获取月份
    string GetMonth(){
        return Base("%B");
    }

    // 获取月份 - 十进制
    int GetMonthInt(){
        return std::stoi(Base("%m"));
    }

    // 获取日期
    string GetDay(){
        return Base("%d");
    }

    // 获取日期 - 十进制
    int GetDayInt(){
        return std::stoi(Base("%e"));
    }

    // 获取小时
    string GetHour(){
        return Base("%H");
    }

    // 获取分钟
    string GetMinute(){
        return Base("%M");
    }

    // 获取秒数
    string GetSecond(){
        return Base("%S");
    }  

private:
    struct std::tm* datetime;
};


#endif